Skip to content

refactor: resolve chat tools per-tool instead of all-or-nothing#973

Merged
chubes4 merged 2 commits intomainfrom
feat/tiered-chat-tool-resolution
Mar 25, 2026
Merged

refactor: resolve chat tools per-tool instead of all-or-nothing#973
chubes4 merged 2 commits intomainfrom
feat/tiered-chat-tool-resolution

Conversation

@chubes4
Copy link
Member

@chubes4 chubes4 commented Mar 25, 2026

Summary

Removes the hardcoded chat short-circuit in ToolPolicyResolver that returned zero tools whenever the acting user lacked datamachine_use_tools.

That coarse gate blocks the future Roadie model where:

  • regular logged-in users can use some safe tools
  • team members can use a broader set
  • admins can use privileged/network tools
  • the model only sees the current caller's resolved toolset

What changed

  • Replaced the blanket chat gate with an optional legacy filter:
    • datamachine_require_use_tools_for_chat_tools
  • Per-tool resolution remains the main gate:
    • linked ability permission callbacks
    • explicit access_level
    • agent policy
  • Untagged tools still default to admin-only, so this change does not suddenly expose privileged tools
  • Added tests covering:
    • default per-tool resolution behavior
    • legacy coarse gate restoration via filter

Why this matters

This is the first core unblocker for making Roadie a true dynamic per-user assistant instead of an all-or-nothing tool surface.

Validation

  • homeboy test data-machine → repo has many pre-existing failures unrelated to this change
  • homeboy lint data-machine → repo has many pre-existing lint/static-analysis issues unrelated to this change
  • focused PHP lint on modified files passed

chubes4 and others added 2 commits March 25, 2026 17:06
Remove the hardcoded chat short-circuit that returned zero tools when the
acting user lacked datamachine_use_tools. Chat tool visibility should be
resolved per-tool via ability permissions, access_level metadata, and
agent policy.

Untagged tools remain admin-only by default, so this safely unblocks
lower-privilege tool tiers without exposing privileged tools. Preserve
the old coarse gate behind a datamachine_require_use_tools_for_chat_tools
filter for installs that want legacy behavior during migration.
inc/Abilities/AgentPingAbilities.php
inc/Abilities/AgentTokenAbilities.php
inc/Abilities/Analytics/BingWebmasterAbilities.php
inc/Abilities/Analytics/GoogleAnalyticsAbilities.php
inc/Abilities/Analytics/GoogleSearchConsoleAbilities.php
inc/Abilities/Analytics/PageSpeedAbilities.php
inc/Abilities/AuthAbilities.php
inc/Abilities/ChatAbilities.php
inc/Abilities/Content/EditPostBlocksAbility.php
inc/Abilities/Content/ReplacePostBlocksAbility.php
inc/Abilities/Email/EmailAbilities.php
inc/Abilities/Engine/ExecuteStepAbility.php
inc/Abilities/Engine/PipelineBatchScheduler.php
inc/Abilities/EngineAbilities.php
inc/Abilities/Fetch/FetchEmailAbility.php
inc/Abilities/Fetch/FetchFilesAbility.php
inc/Abilities/Fetch/FetchRssAbility.php
inc/Abilities/Fetch/FetchWordPressApiAbility.php
inc/Abilities/Fetch/FetchWordPressMediaAbility.php
inc/Abilities/Fetch/GetWordPressPostAbility.php
inc/Abilities/Fetch/QueryWordPressPostsAbility.php
inc/Abilities/File/AgentFileAbilities.php
inc/Abilities/File/FlowFileAbilities.php
inc/Abilities/Flow/FlowHelpers.php
inc/Abilities/Flow/PauseFlowAbility.php
inc/Abilities/Flow/ResumeFlowAbility.php
inc/Abilities/FlowAbilities.php
inc/Abilities/FlowStep/FlowStepHelpers.php
inc/Abilities/FlowStepAbilities.php
inc/Abilities/Handler/TestHandlerAbility.php
inc/Abilities/HandlerAbilities.php
inc/Abilities/InternalLinkingAbilities.php
inc/Abilities/Job/JobHelpers.php
inc/Abilities/JobAbilities.php
inc/Abilities/Media/ImageGenerationAbilities.php
inc/Abilities/Pipeline/PipelineHelpers.php
inc/Abilities/PipelineAbilities.php
inc/Abilities/PipelineStepAbilities.php
inc/Abilities/ProcessedItemsAbilities.php
inc/Abilities/Publish/PublishWordPressAbility.php
inc/Abilities/Publish/SendEmailAbility.php
inc/Abilities/SettingsAbilities.php
inc/Abilities/StepTypeAbilities.php
inc/Abilities/Taxonomy/CreateTaxonomyTermAbility.php
inc/Abilities/Taxonomy/DeleteTaxonomyTermAbility.php
inc/Abilities/Taxonomy/GetTaxonomyTermsAbility.php
inc/Abilities/Taxonomy/ResolveTermAbility.php
inc/Abilities/Taxonomy/UpdateTaxonomyTermAbility.php
inc/Abilities/TaxonomyAbilities.php
inc/Api/AgentFiles.php
inc/Api/AgentPing.php
inc/Api/Agents.php
inc/Api/Analytics.php
inc/Api/Auth.php
inc/Api/Chat/Chat.php
inc/Api/Chat/ChatOrchestrator.php
inc/Api/Chat/Tools/AddPipelineStep.php
inc/Api/Chat/Tools/CreatePipeline.php
inc/Api/Email.php
inc/Api/Execute.php
inc/Api/FlowFiles.php
inc/Api/Flows/FlowQueue.php
inc/Api/Flows/FlowScheduling.php
inc/Api/Flows/FlowSteps.php
inc/Api/Flows/Flows.php
inc/Api/Handlers.php
inc/Api/InternalLinks.php
inc/Api/Jobs.php
inc/Api/Logs.php
inc/Api/Pipelines/PipelineFlows.php
inc/Api/Pipelines/PipelineSteps.php
inc/Api/Pipelines/Pipelines.php
inc/Api/ProcessedItems.php
inc/Api/Providers.php
inc/Api/Settings.php
inc/Api/StepTypes.php
inc/Api/Tools.php
inc/Api/Users.php
inc/Api/WebhookTrigger.php
inc/Cli/Commands/AgentsCommand.php
inc/Cli/Commands/EmailCommand.php
inc/Cli/Commands/Flows/FlowsCommand.php
inc/Cli/Commands/PipelinesCommand.php
inc/Cli/Commands/ProcessedItemsCommand.php
inc/Cli/Commands/RetentionCommand.php
inc/Cli/Commands/TestCommand.php
inc/Core/ActionScheduler/ActionsCleanup.php
inc/Core/Admin/FlowFormatter.php
inc/Core/Auth/AgentAuthCallback.php
inc/Core/Auth/AgentAuthMiddleware.php
inc/Core/Auth/AgentAuthorize.php
inc/Core/Database/Agents/AgentAccess.php
inc/Core/Database/Agents/AgentTokens.php
inc/Core/Database/Logs/LogRepository.php
inc/Core/Database/PostIdentityIndex/PostIdentityIndex.php
inc/Core/OAuth/OAuth2Handler.php
inc/Core/Steps/Fetch/Handlers/WordPress/WordPress.php
inc/Core/Steps/Fetch/Handlers/WordPressMedia/WordPressMedia.php
inc/Core/Steps/Fetch/Tools/SkipItemTool.php
inc/Core/Steps/Publish/Handlers/PublishHandler.php
inc/Core/Steps/Update/UpdateStep.php
inc/Engine/AI/System/SystemAgentServiceProvider.php
inc/Engine/AI/System/Tasks/AltTextTask.php
inc/Engine/AI/System/Tasks/ImageGenerationTask.php
inc/Engine/AI/System/Tasks/ImageOptimizationTask.php
inc/Engine/AI/System/Tasks/InternalLinkingTask.php
inc/Engine/AI/System/Tasks/MetaDescriptionTask.php
inc/Engine/AI/Tools/Global/AgentDailyMemory.php
inc/Engine/AI/Tools/Global/AgentMemory.php
inc/Engine/AI/Tools/Global/AmazonAffiliateLink.php
inc/Engine/AI/Tools/Global/InternalLinkAudit.php
inc/Engine/AI/Tools/Global/LocalSearch.php
inc/Engine/AI/Tools/Global/WebFetch.php
inc/Engine/AI/Tools/Global/WordPressPostReader.php
inc/migrations.php
@homeboy-ci
Copy link
Contributor

homeboy-ci bot commented Mar 25, 2026

Homeboy Results — data-machine

Homeboy

Failure Digest

Lint Failure Digest

Test Failure Digest

Audit Failure Digest

Autofixability classification

  • Overall: auto_fixable
  • Autofix enabled: yes
  • Autofix attempted this run: no
  • Auto-fixable failed commands:
    • lint
  • Failed commands with available automated fixes:
    • lint

Machine-readable artifacts

  • {command}.json — structured output per command (from homeboy --output)

⚡ Scope: changed files only

audit (changed files only)

  • Alignment score: 0.795
  • Outliers in current run: 44
  • Drift increased: no
  • Severity counts: info: 399, unknown: 44, warning: 600
  • Top actionable findings:
    1. inc/Abilities/PermissionHelper.php — naming_mismatch — Helper-like name does not match convention suffix 'Abilities': PermissionHelper
    2. inc/Abilities/PermissionHelper.php — missing_import — Missing import: DataMachine\Abilities\PermissionHelper
    3. inc/Core/Database/Agents/Agents.php — missing_import — Missing import: DataMachine\Core\Database\Agents\Agents
    4. inc/Abilities/Analytics/PageSpeedAbilities.php — missing_method — Missing method: fetchStats
    5. inc/Api/WebhookTrigger.php — missing_method — Missing method: check_permission
    6. inc/Api/Handlers.php — missing_method — Missing method: check_permission
    7. inc/Api/Providers.php — missing_method — Missing method: check_permission
    8. inc/Api/Execute.php — missing_method — Missing method: check_permission
    9. inc/Api/StepTypes.php — missing_method — Missing method: check_permission
    10. inc/Api/Tools.php — missing_method — Missing method: check_permission
Audit findings (10 shown)
1. **inc/Abilities/PermissionHelper.php** — naming_mismatch — Helper-like name does not match convention suffix 'Abilities': PermissionHelper
2. **inc/Abilities/PermissionHelper.php** — missing_import — Missing import: DataMachine\Abilities\PermissionHelper
3. **inc/Core/Database/Agents/Agents.php** — missing_import — Missing import: DataMachine\Core\Database\Agents\Agents
4. **inc/Abilities/Analytics/PageSpeedAbilities.php** — missing_method — Missing method: fetchStats
5. **inc/Api/WebhookTrigger.php** — missing_method — Missing method: check_permission
6. **inc/Api/Handlers.php** — missing_method — Missing method: check_permission
7. **inc/Api/Providers.php** — missing_method — Missing method: check_permission
8. **inc/Api/Execute.php** — missing_method — Missing method: check_permission
9. **inc/Api/StepTypes.php** — missing_method — Missing method: check_permission
10. **inc/Api/Tools.php** — missing_method — Missing method: check_permission

lint (changed files only)

test (changed files only)

  • Failed tests: 0
Tooling versions
  • Homeboy CLI: homeboy 0.86.1+6302a6ed
  • Extension: wordpress from https://github.com/Extra-Chill/homeboy-extensions
  • Extension revision: unknown
  • Action: Extra-Chill/homeboy-action@v2

Homeboy Action v1

@chubes4 chubes4 merged commit 51cbe65 into main Mar 25, 2026
1 check failed
@chubes4 chubes4 deleted the feat/tiered-chat-tool-resolution branch March 25, 2026 17:30
chubes4 added a commit that referenced this pull request Mar 25, 2026
…cope

fix: revert out-of-scope Homeboy autofix from #973
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant